package me.yangzhi.demo;

// 导入必要的Android类
import android.content.Context;          // 上下文类，用于访问应用资源
import android.view.LayoutInflater;     // 布局加载器，用于加载XML布局文件
import android.view.View;               // 视图基类
import android.view.ViewGroup;          // 视图组类，用于容纳子视图
import android.widget.BaseAdapter;      // 适配器基类
import android.widget.ImageView;        // 图片视图，用于显示头像
import android.widget.TextView;         // 文本视图，用于显示用户名
import java.util.List;                  // 列表接口，用于存储好友数据

/**
 * 好友列表适配器类
 * 用于将好友数据转换为ListView可以显示的视图
 */
public class FriendAdapter extends BaseAdapter {
    // 上下文对象，用于加载布局
    private Context context;
    // 存储好友数据的列表
    private List<Friend> friends;

    /**
     * 构造方法
     * @param context 上下文对象
     * @param friends 好友数据列表
     */
    public FriendAdapter(Context context, List<Friend> friends) {
        this.context = context;
        this.friends = friends;
    }

    /**
     * 获取列表项的总数
     * @return 返回好友列表的大小
     */
    @Override
    public int getCount() {
        return friends.size();
    }

    /**
     * 获取指定位置的好友对象
     * @param position 位置索引
     * @return 返回指定位置的好友对象
     */
    @Override
    public Friend getItem(int position) {
        return friends.get(position);
    }

    /**
     * 获取列表项的ID
     * @param position 位置索引
     * @return 返回位置作为ID
     */

    @Override
    public long getItemId(int position) {
        return position;
    }

    /**
     * 创建或更新列表项的视图
     * @param position 位置索引
     * @param convertView 可重用的视图对象
     * @param parent 父视图组
     * @return 返回列表项的视图
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // ViewHolder用于缓存视图中的控件引用
        ViewHolder holder;
        
        // 判断convertView是否为空，为空则创建新视图
        if (convertView == null) {
            // 加载列表项布局
            convertView = LayoutInflater.from(context).inflate(R.layout.item_friend, parent, false);
            // 创建ViewHolder对象
            holder = new ViewHolder();
            // 获取并保存控件引用
            holder.ivAvatar = convertView.findViewById(R.id.iv_avatar);
            holder.tvUsername = convertView.findViewById(R.id.tv_username);
            // 将ViewHolder保存到convertView的Tag中
            convertView.setTag(holder);
        } else {
            // 如果convertView不为空，则从Tag中获取ViewHolder
            holder = (ViewHolder) convertView.getTag();
        }

        // 获取当前位置的好友数据
        Friend friend = getItem(position);
        // 设置头像
        holder.ivAvatar.setImageResource(friend.getAvatarResId());
        // 设置用户名
        holder.tvUsername.setText(friend.getUsername());

        return convertView;
    }

    /**
     * ViewHolder类
     * 用于缓存列表项中的控件引用，提高性能
     */
    private static class ViewHolder {
        ImageView ivAvatar;    // 头像图片视图
        TextView tvUsername;   // 用户名文本视图
    }
} 